package com.scheduling.schedule.service;

import com.scheduling.schedule.dto.SchedulePlanDTO;
import com.scheduling.schedule.dto.ScheduleRequest;
import com.scheduling.schedule.dto.ScheduleResult;
import com.scheduling.schedule.entity.SchedulePlan;
import com.scheduling.schedule.entity.WorkOrder;

import java.util.List;

/**
 * 排产服务接口
 *
 * @author 开发团队
 */
public interface ScheduleService {

    /**
     * 执行排产算法
     *
     * @param request 排产请求
     * @return 排产结果
     */
    ScheduleResult executeSchedule(ScheduleRequest request);

    /**
     * 保存排产计划
     *
     * @param scheduleResult 排产结果
     * @param request        排产请求
     * @return 排产计划ID
     */
    String saveSchedulePlan(ScheduleResult scheduleResult, ScheduleRequest request);

    /**
     * 确认排产计划
     *
     * @param planId 排产计划ID
     * @return 是否成功
     */
    boolean confirmSchedulePlan(String planId);

    /**
     * 查询排产计划列表
     *
     * @return 排产计划列表
     */
    List<SchedulePlan> getSchedulePlans();

    /**
     * 根据ID查询排产计划详情
     *
     * @param planId 排产计划ID
     * @return 排产计划
     */
    SchedulePlanDTO getSchedulePlanById(String planId);

    /**
     * 查询待排产的工单
     *
     * @return 工单列表
     */
    List<WorkOrder> getPendingWorkOrders();

    /**
     * 获取支持的排产算法类型
     *
     * @return 算法类型列表
     */
    List<String> getSupportedAlgorithmTypes();

    /**
     * 删除排产计划
     *
     * @param planId 排产计划ID
     * @return 是否成功
     */
    boolean deleteSchedulePlan(String planId);
} 